package com.atguigu.lease.web.admin.controller.apartment;

import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.web.admin.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/admin/file")
//swagger描述接口模块的注解
@Tag(name = "文件管理模块")
public class FileController {
    ///admin/file/upload
    @Resource
    FileService fileService;
    /*
        javaweb 文件上传：
            前端表单 不会对上传文件进行编码，将上传的文件 每个封装为一个部件来提交
               前端会创建一个uuid作为分隔符 把一个部件的 类型、名称、以及文件流 封装提交到后端

            后端springmvc使用了 IOUtil + FileUpload 工具包 读取输入流，使用fileUpload按照分隔符解析请求体的文件内容
            ， 解析后 每个部件解析为一个  MultipartFile对象(后端接收时 使用上传的组件名称当作键使用MultipartFile当作值映射)
     */
    //1、文件上传接口
    //描述接口的注解
    @Operation(summary = "文件上传")
    @PostMapping("/upload")
    public Result<String> upload(@RequestParam("file") MultipartFile file){
        //上传文件后返回文件的路径 给前端回显
        return Result.ok(fileService.upload(file));
    }
    //2、删除文件接口
    @Operation(summary = "删除文件")
    @DeleteMapping("delete")
    //in = ParameterIn.QUERY 表示swagger文档中 该参数描述时 参数传参的位置是哪里
    // PATH路径参数  HEADER头
    public Result<String> delete(@Parameter(in = ParameterIn.QUERY , description = "要删除文件的完整路径",
            example = "http://cadasdsad:9000/adsad.jpg")@RequestParam("path")String path){
        return Result.ok(fileService.delete(path));
    }

}
